package cn.itcast.tools;

import cn.itcast.dto.PackageDTO;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * 套餐查询工具
 */
@Component
public class PackageTools {

    /**
     * 查询套餐数据
     * @param budget 预算范围，如：50以下、50-100、100以上
     * @param dataRequirement 流量需求场景，如：轻度文字、视频刷剧、直播
     * @param callRequirement 通话需求，如：300分钟、500分钟、不限量
     * @param needBroadband 是否需要宽带
     * @param needSubCard 是否需要副卡
     * @return 匹配的套餐列表
     */
    @Tool(description = "根据用户的预算、流量需求、通话需求、宽带和副卡需求查询匹配的套餐")
    public List<PackageDTO> queryPackages(
            @org.springframework.ai.tool.annotation.ToolParam(description = "预算范围：50以下、50-100、100以上") String budget,
            @org.springframework.ai.tool.annotation.ToolParam(description = "流量需求场景：轻度文字、视频刷剧、直播") String dataRequirement,
            @org.springframework.ai.tool.annotation.ToolParam(description = "通话需求：如300分钟、500分钟、不限量") String callRequirement,
            @org.springframework.ai.tool.annotation.ToolParam(description = "是否需要宽带：true/false") Boolean needBroadband,
            @org.springframework.ai.tool.annotation.ToolParam(description = "是否需要副卡：true/false") Boolean needSubCard) {
        
        // 模拟套餐数据（根据图片中的套餐数据）
        List<PackageDTO> allPackages = getAllPackages();
        List<PackageDTO> matchedPackages = new ArrayList<>();
        
        for (PackageDTO pkg : allPackages) {
            if (matchesCriteria(pkg, budget, dataRequirement, callRequirement, needBroadband, needSubCard)) {
                matchedPackages.add(pkg);
            }
        }
        
        // 返回最多3个匹配的套餐
        return matchedPackages.size() > 3 ? matchedPackages.subList(0, 3) : matchedPackages;
    }
    
    /**
     * 获取所有套餐数据
     */
    private List<PackageDTO> getAllPackages() {
        List<PackageDTO> packages = new ArrayList<>();
        
        // 经济卡
        packages.add(PackageDTO.builder()
                .packageName("经济卡")
                .monthlyFee(39)
                .dataTraffic(10)
                .callDuration(100)
                .additionalServices("无")
                .contractPeriod(0)
                .promotionalActivities("首月半价")
                .build());
        
        // 畅享全家享
        packages.add(PackageDTO.builder()
                .packageName("畅享全家享")
                .monthlyFee(99)
                .dataTraffic(50)
                .callDuration(500)
                .additionalServices("200M宽带+2张副卡")
                .contractPeriod(12)
                .promotionalActivities("送视频会员月卡")
                .build());
        
        // 全球通尊享
        packages.add(PackageDTO.builder()
                .packageName("全球通尊享")
                .monthlyFee(199)
                .dataTraffic(Integer.MAX_VALUE) // 不限量
                .callDuration(2000)
                .additionalServices("国际漫游+5G优先")
                .contractPeriod(24)
                .promotionalActivities("机场贵宾厅2次/年")
                .build());
        
        // 学生青春卡
        packages.add(PackageDTO.builder()
                .packageName("学生青春卡")
                .monthlyFee(59)
                .dataTraffic(30)
                .callDuration(200)
                .additionalServices("校园网加速")
                .contractPeriod(6)
                .promotionalActivities("免流特定APP")
                .build());
        
        return packages;
    }
    
    /**
     * 判断套餐是否匹配用户需求
     */
    private boolean matchesCriteria(PackageDTO pkg, String budget, String dataRequirement, 
                                   String callRequirement, Boolean needBroadband, Boolean needSubCard) {
        // 预算匹配
        if (budget != null && !budget.isEmpty()) {
            if (budget.contains("50以下") && pkg.getMonthlyFee() >= 50) {
                return false;
            }
            if (budget.contains("50-100")) {
                if (pkg.getMonthlyFee() < 50 || pkg.getMonthlyFee() > 100) {
                    return false;
                }
            }
            if (budget.contains("100以上") && pkg.getMonthlyFee() <= 100) {
                return false;
            }
        }
        
        // 流量需求匹配
        if (dataRequirement != null && !dataRequirement.isEmpty()) {
            if (dataRequirement.contains("视频") || dataRequirement.contains("直播")) {
                // 视频和直播需要更多流量
                if (pkg.getDataTraffic() < 30) {
                    return false;
                }
            }
        }
        
        // 宽带需求匹配
        if (Boolean.TRUE.equals(needBroadband) && !pkg.getAdditionalServices().contains("宽带")) {
            return false;
        }
        
        // 副卡需求匹配
        if (Boolean.TRUE.equals(needSubCard) && !pkg.getAdditionalServices().contains("副卡")) {
            return false;
        }
        
        return true;
    }
}
